(Fadd_text_properties): Don't treat the initial
authorRichard M. Stallman <rms@gnu.org>
Mon, 7 Jun 1993 22:17:35 +0000 (22:17 +0000)
committerRichard M. Stallman <rms@gnu.org>
Mon, 7 Jun 1993 22:17:35 +0000 (22:17 +0000)
interval specially, aside from splitting off the part starting
where we want to start changing things.
(Fremove_text_properties): Likewise.
For ending interval, split it left as in Fadd_text_properties.
(Fset_text_properties): Don't set starting interval if it goes
past END.  Instead, split it left and set the left part.

src/textprop.c

index e651cbf243bd85e19c836d66aa1770e706c5f200..89b882b511db6b9fc9ce4f6025a58d8fed124dc6 100644 (file)
@@ -649,22 +649,10 @@ Return t if any property value actually changed, nil otherwise.")
          unchanged = i;
          i = split_interval_right (unchanged, s - unchanged->position + 1);
          copy_properties (unchanged, i);
-         if (LENGTH (i) > len)
-           {
-             i = split_interval_left (i, len + 1);
-             copy_properties (unchanged, i);
-             add_properties (properties, i, object);
-             return Qt;
-           }
-
-         add_properties (properties, i, object);
-         modified = 1;
-         len -= LENGTH (i);
-         i = next_interval (i);
        }
     }
 
-  /* We are at the beginning of an interval, with len to scan */
+  /* We are at the beginning of interval I, with LEN chars to scan.  */
   for (;;)
     {
       if (i == 0)
@@ -742,15 +730,17 @@ is the string or buffer containing the text.")
     {
       unchanged = i;
       i = split_interval_right (unchanged, s - unchanged->position + 1);
-      set_properties (props, i, object);
 
       if (LENGTH (i) > len)
        {
-         i = split_interval_right (i, len);
          copy_properties (unchanged, i);
+         i = split_interval_left (i, len + 1);
+         set_properties (props, i, object);
          return Qt;
        }
 
+      set_properties (props, i, object);
+
       if (LENGTH (i) == len)
        return Qt;
 
@@ -828,25 +818,13 @@ Return t if any property was actually removed, nil otherwise.")
            return Qnil;
          len -= got;
        }
-      /* Remove the properties from this interval.  If it's short
-         enough, return, splitting it if it's too short. */
+      /* Split away the beginning of this interval; what we don't
+        want to modify.  */
       else
        {
          unchanged = i;
          i = split_interval_right (unchanged, s - unchanged->position + 1);
          copy_properties (unchanged, i);
-         if (LENGTH (i) > len)
-           {
-             i = split_interval_left (i, len + 1);
-             copy_properties (unchanged, i);
-             remove_properties (props, i, object);
-             return Qt;
-           }
-
-         remove_properties (props, i, object);
-         modified = 1;
-         len -= LENGTH (i);
-         i = next_interval (i);
        }
     }
 
@@ -868,7 +846,8 @@ Return t if any property was actually removed, nil otherwise.")
            }
 
          /* i has the properties, and goes past the change limit */
-         unchanged = split_interval_right (i, len + 1);
+         unchanged = i;
+         i = split_interval_left (i, len + 1);
          copy_properties (unchanged, i);
          remove_properties (props, i, object);
          return Qt;